import paramiko


class SSH_Option:
    def __init__(self, hostname, username, password=None, key_filename=None):
        """
        初始化SSH客户端。
        :param hostname: 远程主机的地址
        :param username: 用户名
        :param password: 密码（可选）
        :param key_filename: SSH密钥文件的路径（可选）
        """
        self.hostname = hostname
        self.username = username
        self.password = password
        self.key_filename = key_filename
        self.client = paramiko.SSHClient()
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    def connect(self):
        """
        连接到SSH服务器。
        """
        try:
            self.client.connect(self.hostname, username=self.username, password=self.password,
                                key_filename=self.key_filename)
            print("SSH连接成功。")
        except Exception as e:
            print(f"连接失败: {e}")

    def run_command(self, command):
        """
        在远程服务器上运行命令。
        :param command: 要执行的命令
        :return: 命令执行结果
        """
        if not self.client:
            print("请先连接SSH服务器。")
            return None

        try:
            stdin, stdout, stderr = self.client.exec_command(command)
            return stdout.read().decode().split("\n"), stderr.read().decode()
        except Exception as e:
            print(f"执行命令时出错: {e}")
            return None

    def close(self):
        """
        关闭SSH连接。
        """
        if self.client:
            self.client.close()
            print("SSH连接已关闭。")
